// gatsby-node.js
const path = require('path')
// 创建页面
// function createPages ({ actions }) {
//     const { createPage } = actions
//     // 获取模板的绝对路径
//     const template = require.resolve("./src/templates/person.js")
//     // 获取模板所需要的数据  slug 为要访问的页面参数
//     const persons = [{
//         slug: "zhangsan",
//         name: "张三",
//         age: 20
//     }, {
//         slug: "lisi",
//         name: "李四",
//         age: 25
//     }]
//     // 根据模板和数据创建页面
//     persons.forEach(person => {
//         createPage({
//             // 模板绝对路径
//             component: template,
//             // 访问地址
//             path: `/person/${person.slug}`,
//             // 传递给模板的数据
//             context: person
//         })
//     })
// }

async function createPages ({ graphql, actions }) {
    // 解构创建页面的方法
    const { createPage } = actions
    // 1. 获取模板的绝对路径
    const template = require.resolve("./src/templates/article.js")
    // 2. 获取模板所需要的数据  从默认参数中解构出 graphql 来获取数据层数据  slug 为要访问的页面参数
    // graphql 方法的返回值是 promise
    let { data } = await graphql(`
        query {
            allMarkdownRemark {
                nodes {
                    fields {
                        slug
                    }
                }
            }
        }
    `)
    data.allMarkdownRemark.nodes.forEach(node => {
        createPage({
            // 模板绝对路径
            component: template,
            // 访问地址
            path: `/article/${node.fields.slug}`,
            // 传递给模板的数据
            context: {
                slug: node.fields.slug
            }
        })
    })
}

// 每次创建页面时会触发
function onCreateNode ({ node, actions }) {
    const { createNodeField } = actions
    // 如果是 markdown 文件
    if (node.internal.type === 'MarkdownRemark') {
        console.log(node.fileAbsolutePath) // 绝对路径
        const slug = path.basename(node.fileAbsolutePath, '.md') // 根据绝对路径返回文件名
        // 为节点添加属性  内部需要包含原本的 node 节点
        createNodeField({
            node,
            name: 'slug',
            value: slug
        })
    }
}

// 因为是在 node 环境下执行  要遵循 CommonJS 标准
module.exports = {
    createPages,
    onCreateNode
}